package com.hex.ds.hdtp.core.app.script.analyze.service;

import com.hex.ds.hdtp.core.app.common.page.PageData;
import com.hex.ds.hdtp.core.app.common.page.dto.PageDto;
import com.hex.ds.hdtp.core.app.script.analyze.dto.request.ScriptAnalyzeTaskRequestDto;
import com.hex.ds.hdtp.core.app.script.analyze.dto.response.ScriptAnalyzeTaskResponseDto;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.List;

/**
 * @Package com.hex.ds.hdtp.core.app.script.analyze.service
 * @ClassName IScriptAnalyzeTaskService
 * @Description 脚本分析任务-业务服务接口
 * @Author gj.xu
 * @Date 2023/12/7 14:52
 * @Version v2.0
 **/
public interface IScriptAnalyzeTaskService {

    /**
     * 分页查询
     *
     * @param scriptAnalyzeTaskRequestDto
     * @param pageDto
     * @return
     */
    PageData queryListByPage(ScriptAnalyzeTaskRequestDto scriptAnalyzeTaskRequestDto, PageDto pageDto);

    /**
     * 根据主键查询
     *
     * @param pkId
     * @return
     */
    ScriptAnalyzeTaskResponseDto queryById(String pkId);

    /**
     * 新增脚本分析任务
     *
     * @param scriptAnalyzeTaskRequestDto
     * @return
     */
    String createTask(ScriptAnalyzeTaskRequestDto scriptAnalyzeTaskRequestDto);

    /**
     * 根据主键更新
     *
     * @param scriptAnalyzeTaskRequestDto
     */
    void modifyById(ScriptAnalyzeTaskRequestDto scriptAnalyzeTaskRequestDto);

    /**
     * 更新待分析数量
     *
     * @param pkId
     * @param total
     */
    void modifyTotal(String pkId, Integer total);

    /**
     * 更新成功数量
     *
     * @param pkId
     */
    void modifySuccessCount(String pkId);

    /**
     * 更新失败数量
     *
     * @param pkId
     */
    void modifyFailCount(String pkId);

    /**
     * 根据主键批量删除
     *
     * @param pkIds
     */
    void batchRemoveById(List<String> pkIds);

    /**
     * 脚本分析
     *
     * @param pkId
     */
    void scriptAnalyze(String pkId);


    /**
     * 获取脚本分析类型
     *
     * @return
     */
    List<String> scriptAnalyzeType();

    /**
     * 上传脚本
     *
     * @param multipartFileList
     * @return
     */
    List<File> upload(List<MultipartFile> multipartFileList);

    /**
     * 创建各迁移任务
     *
     * @param scriptAnalyzeTaskRequestDto
     */
    void createTransferTask(ScriptAnalyzeTaskRequestDto scriptAnalyzeTaskRequestDto);

}
